<?php

class Get {

    /**
     * 获取通信协议（http或https），小写格式
     *
     * @return string
     */
    public static function protocol() {
        return (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
    }

    /**
     * 获取当前浏览器地址的全路径字符串
     *
     * @return string
     */
    public static function url() {
        return self::protocol() . "$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
    }

    /**
     * 获取服务器域名信息（包含端口号）
     *
     * @return string
     */
    public static function host() {
        return $_SERVER['HTTP_HOST'];
    }
    
    /**
     * 获取当前浏览器地址的queryString部分字符串
     *
     * @return string 
     */
    public static function queryString() {
        $result = $_SERVER['QUERY_STRING'];
        $result = trim(strip_tags(htmlspecialchars($result)));
        return $result;
    }

    /**
     * 获取post提交过来的原始数据字符串
     *
     * @param string $default 默认值
     * @return string 
     */
    public static function raw(string $default = "") {
        $result = urldecode(file_get_contents('php://input', 'r'));
        return $result ?? $default;
    }

    /**
     * 获取本次访问的访问方法（get, post等）
     *
     * @return string
     */
    public static function method() {
        return strtolower($_SERVER['REQUEST_METHOD']);
    }

    /**
     * 获取当前访问的文件名称（比如：index.php）
     *
     * @return string
     */
    public static function php() {
        return substr($_SERVER['PHP_SELF'], strrpos($_SERVER['PHP_SELF'], '/') + 1);
    }

    /**
     * 获取用户的真实ip地址
     *
     * @return string
     */
    public static function ip() {
        $ip = 'unknow';
        if (getenv("HTTP_CLIENT_IP")) $ip = getenv("HTTP_CLIENT_IP");
        elseif (getenv("HTTP_X_FORWARDED_FOR")) $ip = getenv("HTTP_X_FORWARDED_FOR");
        elseif (getenv("REMOTE_ADDR")) $ip = getenv("REMOTE_ADDR");
        return $ip;
    }

    /**
     * 获取用户使用的浏览器类型
     *
     * @return string
     */
    public static function agent() {
        $agent = $_SERVER['HTTP_USER_AGENT'];
    }
}
